home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / internet / yam_i_dodatki / yamtools1.7 / ytreformat.rexx < prev    next >
OS/2 REXX Batch file  |  1997-06-29  |  34KB  |  939 lines

  1. /******************************************************************************/
  2. /*                                                                            */
  3. /*                            YTReFormat                                      */
  4. /*                 Copyright ©1997 by Dick Whiting                            */
  5. /*                                                                            */
  6. /*----------------------------------------------------------------------------*/
  7. /* This script requires YAMTOOLS for it to work. If you don't have YAMTOOLS   */
  8. /* you can get it on Aminet in directory comm/mail. This script allows you    */
  9. /* to rewrap a mail file. I FINALLY got tired of doing it the hard way.       */
  10. /* I would have liked to make it automatic, but just couldn't see how.        */
  11. /* The current version will make all the quoting the same or remove it.       */
  12. /* If you have any ideas for additional reformatting, contact me.             */
  13. /*----------------------------------------------------------------------------*/
  14. /* To use this select a mail and adjust the outer and inner quoting when      */
  15. /* prompted. The outer quoting should be the character(s) or possibly none    */
  16. /* that prefix the piece of lines that got wrapped badly. The inner quoting   */
  17. /* should be the remainder (or none) necessary to make the lines uniform.     */
  18. /* Sorry, if that is unclear. Play with it using the UNDO/REDO to figure      */
  19. /* out how to make it work.                                                   */
  20. /*----------------------------------------------------------------------------*/
  21. /*                                                                            */
  22. /* Standard Disclaimer: I wrote it, it works for me, I don't guarantee        */
  23. /* that it will do anything productive for anyone else, etc. etc. ;-)         */
  24. /*                                                                            */
  25. /*HOWEVER, if you DO find a use for it: I homeschool my kids and they         */
  26. /*would love a postcard from where EVER you live.                             */
  27. /*                                                                            */
  28. /*Instant GEOGRAPHY lesson;)                                                  */
  29. /*                                                                            */
  30. /*                                                                            */
  31. /*POSTCARDS:    Dick Whiting                                                  */
  32. /*              28590 S. Beavercreek Rd.                                      */
  33. /*              Mulino, Oregon 97042                                          */
  34. /*              USA                                                           */
  35. /*                                                                            */
  36. /*----------------------------------------------------------------------------*/
  37. /*                                                                            */
  38. /*               Address Bug Reports or Comments to:                          */
  39. /*                Dick Whiting <dwhiting@europa.com>                          */
  40. /*                           15 June 1997                                     */
  41. /*                                                                            */
  42. /******************************************************************************/
  43. /*
  44. $VER: 1.0 Copyright ©1997 by Dick Whiting
  45. $AUTHOR: Dick Whiting
  46. $DESCRIPTION: Re-Format a mail file - needs YAMTOOLS
  47. */
  48.  
  49. options results
  50. options failat 21
  51.  
  52. wrapparm=''
  53. parse arg mainparm subparm
  54.  
  55. /**************************************************************************/
  56. /*                         Initialize Variables                           */
  57. /**************************************************************************/
  58. Call MUIvars                                /* go define vars for MUI use */
  59. Call YTvars                                 /* various values used in YT  */
  60. Call Helpvars                               /* pointers into HELP guide   */
  61. Call Localize                               /* vars for localizing strings*/
  62. Call Builtvars                              /* built using previous values*/
  63.  
  64. Address YAMTOOLS
  65.  
  66. Call CheckYam
  67.  
  68. Select
  69.    when mainparm='' then do
  70.       Call CheckDup
  71.       Call GetYamInfo
  72.       Call ReadMail
  73.    end
  74.    when mainparm='DONE' then do
  75.       Call SaveFile   
  76.       Call Quit
  77.    end
  78.    when mainparm='SAVE' then do
  79.       Call SaveFile   
  80.    end
  81.    when mainparm='REWRAP' | mainparm='UNQUOTE' then do
  82.       Call AskUser
  83.    end
  84.    when mainparm='DOREWRAP' | mainparm='DOUNQUOTE' then do
  85.       Call ValidateUser
  86.       Call WrapBlock
  87.    end
  88.    when mainparm='STYLE' then do
  89.       Call Stylelines
  90.    end
  91.    when mainparm='UNDO' then do
  92.       Call Undo
  93.    end
  94.    when mainparm='REDO' then do
  95.       Call Redo
  96.    end
  97.    when mainparm='QUIT' then do
  98.       Call Quit
  99.    end
  100.    otherwise do
  101.       errmsg=_text._badparm
  102.       Call ErrorMsg
  103.    end
  104. end 
  105.  
  106. exit
  107.  
  108. /**************************************************************************/
  109. /*                        Read the mail file into array                   */
  110. /**************************************************************************/
  111. ReadMail:     
  112.  
  113.     header.=' '
  114.  
  115.    i=0
  116.    header=TRUE
  117.    if open('IN',mfile,'R') then do
  118.       Call BuildWindow
  119.       infotext=_text._procmail
  120.       infobuttons=''
  121.       showbusy=TRUE
  122.       Call InfoWindow
  123.  
  124.       list ID YTRFT ATTRS MUIA_List_Quiet TRUE 
  125.       list ID YTRFM ATTRS MUIA_List_Quiet TRUE 
  126.       do until eof('IN')
  127.          linein=readln('IN')
  128.          if header then do
  129.             list ID YTRFH INSERT POS MUIV_List_Insert_Bottom STRING '='linein
  130.             if linein='' then do 
  131.                     header=FALSE
  132.                     do j=1 to 4
  133.                    list ID YTRFT INSERT POS MUIV_List_Insert_Bottom,
  134.                               STRING '='header.j
  135.                     end
  136.                 end
  137.                 select
  138.                 when word(linein,1)='From:' then header.1=linein
  139.                 when word(linein,1)='To:'   then header.2=linein
  140.                 when word(linein,1)='Date:' then header.3=linein
  141.                 when word(linein,1)='Subject:' then header.4=linein
  142.                     otherwise nop
  143.                 end
  144.          end
  145.          else do
  146.             if ~eof('IN') then do
  147.                linein=right(i,5,'0')||',='||linein
  148.                list ID YTRFM INSERT POS MUIV_List_Insert_Bottom, 
  149.                     ATTRS MUIA_List_Format '"WEIGHT=0 MAXWIDTH=0 MINWIDTH=0,"',
  150.                     STRING linein
  151.                i=i+1
  152.             end
  153.          end
  154.       end
  155.       foo=close('IN')
  156.       list ID YTRFT ATTRS MUIA_List_Quiet FALSE
  157.       list ID YTRFM ATTRS MUIA_List_Quiet FALSE
  158.       window ID YTINF close
  159.    end
  160.    else do
  161.       errmsg=_text._badmail
  162.       Call ErrorMsg
  163.       exit     
  164.    end
  165.    
  166. Return
  167.  
  168. /**************************************************************************/
  169. /*                        Save the mail file back                         */
  170. /**************************************************************************/
  171. SaveFile:     
  172.  
  173.    infotext=_text._savemail    
  174.    infobuttons=''
  175.    showbusy=TRUE
  176.    Call InfoWindow
  177.  
  178.    text ID YTRFF
  179.    mfile=result
  180.  
  181.    fstate=statef(mfile)                           /* file information     */
  182.    fbytes=subword(fstate,2,1)                     /* length of file       */
  183.    fdate=subword(fstate,5,1)                      /* internal date        */
  184.    fmins=subword(fstate,6,1)                      /* minutes since midnite*/
  185.    fticks=subword(fstate,7,1)                     /* ticks past minutes   */
  186.    fcomm=subword(fstate,8)                        /* old comment          */
  187.  
  188.    fdate=date('E',fdate,'I')                      /* get date in ddmmyy   */
  189.    fdate=translate(fdate,'-','/')                 /* convert / to -       */
  190.    hh=fmins%60                                    /* get hours            */
  191.    hh=right(hh,2,'0')                             /* force to 2 digits    */
  192.    mm=fmins//60                                   /* get minutes          */
  193.    mm=right(mm,2,'0')                             /* force to 2 digits    */
  194.    ss=fticks%50                                   /* seconds              */
  195.    ss=right(ss,2,'0')                             /* force it             */
  196.    ftime=hh||':'||mm||':'||ss                     /* timestamp rebuilt    */
  197.  
  198.    if open('OUT',mfile,'W') then do
  199.       list ID YTRFH ATTRS MUIA_List_Entries       /* process header recs  */
  200.       mcnt=result
  201.       do i=0 to mcnt-1   
  202.          list ID YTRFH POS i
  203.          lineout=result
  204.          lineout=substr(lineout,2)                /* strip = sign         */
  205.          foo=writeln('OUT',lineout)
  206.       end
  207.       list ID YTRFM ATTRS MUIA_List_Entries
  208.       mcnt=result
  209.       do i=0 to mcnt-1   
  210.          list ID YTRFM POS i
  211.          lineout=result
  212.          lineout=substr(lineout,8)           /* strip number and = sign   */
  213.          foo=writeln('OUT',lineout)
  214.       end
  215.       foo=close('OUT')
  216.    end
  217.  
  218.    Address Command 'SetDate ' mfile fdate ftime
  219.  
  220.    window ID YTINF close
  221.    
  222. Return
  223.  
  224. /**************************************************************************/
  225. /*                        Validate User Input                             */
  226. /**************************************************************************/
  227. ValidateUser:
  228.  
  229.    string ID RUSR1 
  230.    OutQuote=result
  231.  
  232.    string ID RUSR2
  233.    InnQuote=result
  234.  
  235.    string ID RUSR3
  236.    WordWrap=result
  237.  
  238.    if ~datatype(WordWrap,'W') then do
  239.       errmsg=_text._wwnotnum
  240.       Call ErrorMsg
  241.       exit     
  242.    end
  243.  
  244.    wraplen=wordwrap-(length(OutQuote)+length(InnQuote))
  245.  
  246.    if WordWrap<wrapmin1 | WordWrap>wrapmax then do
  247.       errmsg=_text._wwoutrange
  248.       Call ErrorMsg
  249.       exit     
  250.    end
  251.  
  252.    if wraplen<wrapmin2 then do
  253.       errmsg=_text._wwshort
  254.       Call ErrorMsg
  255.       exit     
  256.    end
  257.  
  258.    window ID YTUSR close
  259.    
  260. Return
  261.  
  262. /**************************************************************************/
  263. /*                        Do the actual wrapping                          */
  264. /**************************************************************************/
  265. WrapBlock:
  266.  
  267.    WWarray.=missing
  268.    j=0
  269.  
  270.    startpos=0                            /* top of list for default       */
  271.  
  272.    list ID YTRFM ATTRS MUIA_List_Entries
  273.    mcnt=result
  274.  
  275.    do i=0 to mcnt-1                      /* locate selected lines to wrap */
  276.       list ID YTRFM 
  277.       wstring=result
  278.       if wstring='' then leave i
  279.       j=substr(wstring,1,5)+0
  280.       if startpos=0 then startpos=j      /* first line rewrapped          */
  281.       WWarray.j=substr(wstring,8)        /* strip prefix stuff            */
  282.    end
  283.  
  284.    if j=0 then do                        /* user didn't select any        */
  285.       errmsg=_text._nolines          
  286.       Call ErrorMsg
  287.       exit     
  288.    end
  289.  
  290.    if mainparm='DOREWRAP' then infotext=_text._dowrap
  291.    else infotext=_text._dounquote
  292.    infobuttons=''
  293.    showbusy=TRUE
  294.    Call InfoWindow
  295.  
  296.    foo=open('OLD','T:YTReForm.old','W')  /* files for undo/redo functions */
  297.    foo=open('NEW','T:YTReForm.new','W')
  298.  
  299.    do i=0 to mcnt-1                      /* loop completely thru list     */
  300.       list ID YTRFM POS i
  301.       linein=result
  302.       if WWarray.i=missing then do       /* not a rewrap line             */
  303.          foo=writeln('OLD',linein)       /* save line to OLD file         */
  304.          WWarray.i=substr(linein,8)      /* copy to new array             */
  305.       end
  306.       else do                            /* start of a block to rewrap    */
  307.          tempstr=''                      /* init to null rewrap string    */
  308.          do j=i to mcnt-1                /* loop thru the new array       */
  309.             linein=WWarray.j             /* get highlighted string ?      */
  310.             if linein=missing then leave j  /* block is complete          */
  311.             WWarray.j=missing            /* clear the entry for now       */
  312.             if OutQuote~='' then do
  313.                if substr(linein,1,length(OutQuote))=OutQuote then do
  314.                   linein=substr(linein,1+length(OutQuote))
  315.                end
  316.             end
  317.             if InnQuote~='' then do
  318.                if substr(linein,1,length(InnQuote))=InnQuote then do
  319.                   linein=substr(linein,1+length(InnQuote))
  320.                end
  321.             end
  322.             tempstr=tempstr||' '||linein /* unquoted text to rewrap       */
  323.             list ID YTRFM POS j          /* keep copying to OLD           */
  324.             linein=result
  325.             foo=writeln('OLD',linein)    /* save line to OLD file         */
  326.          end         
  327.          tempstr=substr(tempstr,2)       /* trim extra blank from start   */
  328.          outlines=0                      /* none processed yet            */
  329.  
  330.          do while length(tempstr)>0      /* the actual rewrapping!!!      */
  331.             blankpos=pos(' ',tempstr)    /* FIRST blank in remaining      */
  332.             select
  333.                when length(tempstr)<wraplen then do
  334.                  newstr=tempstr
  335.                  tempstr=''
  336.                end
  337.                when blankpos=0 then do
  338.                  newstr=tempstr
  339.                  tempstr=''
  340.                end
  341.                when blankpos>wraplen then do
  342.                   newstr=substr(tempstr,1,blankpos)
  343.                   tempstr=substr(tempstr,blankpos+1)
  344.                end
  345.                otherwise do
  346.                   newstr=substr(tempstr,1,lastpos(' ',substr(tempstr,1,wraplen)))
  347.                   tempstr=substr(tempstr,1+lastpos(' ',substr(tempstr,1,wraplen)))
  348.                end
  349.             end
  350.             if mainparm='DOREWRAP' then do  /* if rewrapping add prefix   */
  351.                newstr=OutQuote||InnQuote||newstr
  352.             end
  353.             k=i+outlines                 /* new pointer for array         */
  354.             WWarray.k=newstr             /* store the wrapped line        */
  355.             outlines=outlines+1
  356.          end
  357.          i=j-1                           /* decrement for loop control    */
  358.       end
  359.    end
  360.  
  361.  
  362. /**************************************************************************/
  363. /*  Clear the list, reload with rewrapped lines, copy to NEW file.        */
  364. /**************************************************************************/
  365.  
  366.    list ID YTRFM ATTRS MUIA_List_Entries
  367.    mcnt=result
  368.  
  369.    list ID YTRFM ATTRS MUIA_List_Visible
  370.    lastpos=result
  371.  
  372.    jumppos=lastpos+startpos-3
  373.    if jumppos>mcnt-1 then jumppos=mcnt-1
  374.  
  375.    list ID YTRFM ATTRS MUIA_List_Quiet TRUE 
  376.  
  377.    method ID YTRFM MUIM_List_Clear
  378.  
  379.    j=0
  380.    do i=0 to mcnt-1
  381.       if wwarray.i=missing then iterate  /* a null entry - skip it        */
  382.       lineout=right(j,5,'0')||',='||wwarray.i
  383.       foo=writeln('NEW',lineout)         /* write to the redo file        */
  384.       list ID YTRFM INSERT POS MUIV_List_Insert_Bottom STRING lineout
  385.       j=j+1                              /* pointer for list              */
  386.    end
  387.  
  388.    button ID YTRFU ATTRS MUIA_Disabled FALSE   /* unghost UNDO button     */
  389.    button ID YTRFR ATTRS MUIA_Disabled TRUE    /* ghost REDO button       */
  390.    
  391.    list ID YTRFM ATTRS MUIA_List_Quiet FALSE
  392.  
  393.    method ID YTRFM MUIM_List_Jump jumppos      /* go to first rewrapped   */
  394.  
  395.    foo=close('OLD')                      /* close undo file               */
  396.    foo=close('NEW')                      /* close redo file               */
  397.  
  398.    window ID YTINF close
  399.  
  400. Return
  401.  
  402. /**************************************************************************/
  403. /*  Loop thru selected lines, display as list of words, style them.       */
  404. /**************************************************************************/
  405. StyleLines:
  406.  
  407.  
  408.  
  409. Return
  410.  
  411. /**************************************************************************/
  412. /*  Clear the list, reload from the OLD file, set button ghosting.        */
  413. /**************************************************************************/
  414. UNDO:
  415.  
  416.    button ID YTRFU ATTRS MUIA_Disabled TRUE    /* ghost UNDO button       */
  417.  
  418.    if open('IN','T:YTReForm.old','R') then do
  419.       infotext=_text._doredo
  420.       infobuttons=''
  421.       showbusy=TRUE
  422.       Call InfoWindow
  423.  
  424.       list ID YTRFM ATTRS MUIA_List_Entries
  425.       mcnt=result
  426.       list ID YTRFM ATTRS MUIA_List_Quiet TRUE
  427.  
  428.       method ID YTRFM MUIM_List_Clear
  429.  
  430.       do until eof('IN')
  431.          linein=readln('IN')
  432.          if ~eof('IN') then do
  433.             list ID YTRFM INSERT POS MUIV_List_Insert_Bottom STRING linein
  434.          end
  435.       end
  436.       foo=close('IN')
  437.       button ID YTRFR ATTRS MUIA_Disabled FALSE   /* unghost REDO button  */
  438.       list ID YTRFM ATTRS MUIA_List_Quiet FALSE
  439.       foo=close('OLD')                   /* close undo file               */
  440.       window ID YTINF close
  441.    end
  442.    else do
  443.       errmsg=_text._noundofile
  444.       Call ErrorMsg
  445.       exit
  446.    end
  447.  
  448.  
  449. Return
  450.  
  451. /**************************************************************************/
  452. /*  Clear the list, reload from the NEW file, set button ghosting.        */
  453. /**************************************************************************/
  454. REDO:
  455.  
  456.    button ID YTRFR ATTRS MUIA_Disabled TRUE    /* ghost REDO button       */
  457.  
  458.    if open('IN','T:YTReForm.new','R') then do
  459.       infotext=_text._doredo
  460.       infobuttons=''
  461.       showbusy=TRUE
  462.       Call InfoWindow
  463.  
  464.       list ID YTRFM ATTRS MUIA_List_Entries
  465.       mcnt=result
  466.       list ID YTRFM ATTRS MUIA_List_Quiet TRUE
  467.  
  468.       method ID YTRFM MUIM_List_Clear
  469.  
  470.       list ID YTRFM ATTRS MUIA_List_Quiet FALSE
  471.       list ID YTRFM ATTRS MUIA_List_Quiet TRUE
  472.       do until eof('IN')
  473.          linein=readln('IN')
  474.          if ~eof('IN') then do
  475.             list ID YTRFM INSERT POS MUIV_List_Insert_Bottom STRING linein
  476.          end
  477.       end
  478.       foo=close('IN')
  479.       button ID YTRFU ATTRS MUIA_Disabled FALSE   /* unghost UNDO button  */
  480.       list ID YTRFM ATTRS MUIA_List_Quiet FALSE
  481.       foo=close('OLD')                   /* close undo file               */
  482.       window ID YTINF close
  483.    end
  484.    else do
  485.       errmsg=_text._noredofile
  486.       Call ErrorMsg
  487.       exit
  488.    end
  489.  
  490. Return
  491.  
  492. /**************************************************************************/
  493. /*  Clear the list, reload from the NEW file, set button ghosting.        */
  494. /**************************************************************************/
  495. QUIT:
  496.  
  497.    if exists('T:YTReForm.new') then do
  498.       Address Command "Delete T:YTReForm.new QUIET"
  499.    end
  500.  
  501.    if exists('T:YTReForm.old') then do
  502.       Address Command "Delete T:YTReForm.old QUIET"
  503.    end
  504.  
  505.    window ID YTREW close
  506.  
  507. Return
  508.  
  509. /**************************************************************************/
  510. /*              Make sure YAM  and YAMTOOLS are running. Show YAM.        */
  511. /**************************************************************************/
  512. CheckYAM:
  513.  
  514.    if ~show('p','YAMTOOLS') then do
  515.       errmsg=_text._noyt
  516.       say errmsg
  517.       exit
  518.    end
  519.  
  520.    if ~show('p','YAM') then do
  521.       errmsg=_text._noyam
  522.       Call ErrorMsg
  523.       exit
  524.    end
  525.  
  526.    Address YAM 'show'                       /* uniconify YAM's screen     */  
  527.  
  528.     Address YAM 'info SCREEN'                /* get YAM's screen           */
  529.     screen=result
  530.     if screen='' then screen='Workbench'
  531.  
  532. Return
  533.  
  534. /**************************************************************************/
  535. /*              Make sure there isn't one running already.                */
  536. /**************************************************************************/
  537. CheckDup:
  538.  
  539.    list ID YTRFM ATTRS MUIA_List_Entries
  540.    if result~='RESULT' then do
  541.       errmsg=_text._secondrun
  542.       Call ErrorMsg
  543.       exit
  544.    end
  545.  
  546. Return
  547. /******************************************************************************/
  548. /*  Get information from YAM config file                                      */
  549. /******************************************************************************/
  550. GetYamInfo:
  551.  
  552.    Address YAM 'getmailinfo file'           /* find which mail to rewrap  */
  553.    mfile=result
  554.    
  555.    if mfile='' | mfile='RESULT' then do     /* no mail selected           */
  556.       errmsg=_text._nomail
  557.       Call ErrorMsg
  558.       exit
  559.    end
  560.  
  561.    WordWrap=''
  562.    QuoteText=''
  563.  
  564.    if open('IN','YAM:.config','R') then do
  565.       do until eof('IN')
  566.          linein=readln('IN')
  567.          parse var linein yamopt '=' yamval
  568.          if upper(yamopt)='WORDWRAP' then do
  569.             WordWrap=strip(yamval)
  570.             leave
  571.          end
  572.       end
  573.       foo=close('IN')
  574.    end
  575.  
  576.    if WordWrap='' then WordWrap=76
  577.  
  578. Return
  579.  
  580. /******************************************************************************/
  581. /*  Display ERROR message and EXIT.                                           */
  582. /******************************************************************************/
  583. ErrorMsg:
  584.  
  585.    window ID YTINF CLOSE
  586.  
  587.    request ID ERRM GADGETS  _text._ok errmsg
  588.  
  589.    exit
  590.  
  591. Return
  592.  
  593. /******************************************************************************/
  594. /*  Display the mail in a list window.                                        */
  595. /******************************************************************************/
  596. BuildWindow:
  597.  
  598.    window ID YTREW TITLE _title._main,        
  599.           COMMAND '"YTReFormat.rexx QUIT"',
  600.           ATTRS MUIA_Window_PublicScreen screen
  601.  
  602.         group
  603.          group HORIZ
  604.                text ID YTRFF HELP help.YTRFF NODE node.YTRFF LABEL mfile
  605.             string ID QTEXT ATTRS MUIA_ShowMe FALSE CONTENT QuoteText
  606.             LABEL _text._wordwrap
  607.             string ID RWRAP HELP help.RWRAP NODE node.RWRAP, 
  608.                          ATTRS MUIA_Weight 10 CONTENT WordWrap
  609.          endgroup
  610.          group ATTRS MUIA_VertWeight 25
  611.             list ID YTRFH INSERT ATTRS MUIA_ShowMe FALSE
  612.             list ID YTRFT HELP help.YTRFT NODE node.YTRFT INSERT
  613.          endgroup
  614.          group HORIZ ATTRS MUIA_VertWeight 300
  615.             group
  616.                list ID YTRFM HELP help.YTRFM NODE node.YTRFM INSERT,
  617.                      ATTRS MUIA_Listview_MultiSelect MUIV_Listview_MultiSelect_Shifted
  618.             endgroup
  619.             group ATTRS MUIA_HorizWeight 10
  620.                button ID YTRFW COMMAND '"YTReFormat.rexx REWRAP"',
  621.                             HELP help.YTRFW NODE node.YTRFW, 
  622.                              LABEL _label._YTRFW
  623. /*             button ID YTRFO COMMAND '"YTReFormat.rexx UNQUOTE"',  */
  624. /*                    HELP help.YTRFO NODE node.YTRFO,                     */
  625. /*                    LABEL _label._YTRFO                            */
  626.                button ID YTRFY COMMAND '"YTReFormat.rexx STYLE"', 
  627.                             HELP help.YTRFY NODE node.YTRFY, 
  628.                       ATTRS MUIA_Disabled TRUE,
  629.                              LABEL _label._YTRFY
  630.                space  
  631.             endgroup
  632.          endgroup
  633.          group HORIZ
  634.             button ID YTRFD COMMAND '"YTReFormat.rexx DONE"',
  635.                         HELP help.YTRFD NODE node.YTRFD, 
  636.                          LABEL _label._YTRFD
  637.             button ID YTRFU COMMAND '"YTReFormat.rexx UNDO"', 
  638.                         HELP help.YTRFU NODE node.YTRFU, 
  639.                    ATTRS MUIA_Disabled TRUE,
  640.                    LABEL _label._YTRFU
  641.             button ID YTRFS COMMAND '"YTReFormat.rexx SAVE"', 
  642.                         HELP help.YTRFS NODE node.YTRFS, 
  643.                          LABEL _label._YTRFS
  644.             button ID YTRFR COMMAND '"YTReFormat.rexx REDO"',
  645.                         HELP help.YTRFR NODE node.YTRFR, 
  646.                    ATTRS MUIA_Disabled TRUE,
  647.                    LABEL _label._YTRFR
  648.             button ID YTRFQ COMMAND '"YTReFormat.rexx QUIT"',
  649.                         HELP help.YTRFQ NODE node.YTRFQ, 
  650.                          LABEL _label._YTRFQ
  651.          endgroup
  652.         endgroup
  653.  
  654.    endwindow
  655.  
  656. Return
  657.  
  658. /******************************************************************************/
  659. /*  Display the mail in a list window.                                        */
  660. /******************************************************************************/
  661. AskUser:
  662.  
  663.    OutQuote=''
  664.    InnQuote=''
  665.  
  666.    string ID RWRAP
  667.    WordWrap=result
  668.  
  669.     Address YAM 'info SCREEN'                /* get YAM's screen           */
  670.     screen=result
  671.     if screen='' then screen='Workbench'
  672.  
  673.    window ID YTUSR TITLE _title._user,
  674.           COMMAND '"window ID YTUSR close"' PORT YAMTOOLS,
  675.           ATTRS MUIA_Window_PublicScreen screen
  676.  
  677.         group HORIZ
  678.          group 
  679.             LABEL DOUBLE _text._outquote
  680.             LABEL DOUBLE _text._inquote
  681.             LABEL DOUBLE _text._wraplen
  682.          endgroup
  683.          group 
  684.             string ID RUSR1 HELP help.RUSR1 NODE node.RUSR1,
  685.                    ATTRS MUIA_CycleChain TRUE, 
  686.                    MUIA_String_AdvanceOnCR TRUE,        
  687.                    CONTENT OutQuote
  688.             string ID RUSR2 HELP help.RUSR2 NODE node.RUSR2,
  689.                    ATTRS MUIA_CycleChain TRUE, 
  690.                    MUIA_String_AdvanceOnCR TRUE,        
  691.                    CONTENT InnQuote
  692.             string ID RUSR3 HELP help.RUSR3 NODE node.RUSR3,
  693.                    ATTRS MUIA_CycleChain TRUE, 
  694.                    MUIA_String_AdvanceOnCR TRUE,        
  695.                    MUIA_String_Accept numerics,
  696.                    CONTENT WordWrap
  697.          endgroup
  698.       endgroup
  699.       group HORIZ
  700.          if mainparm='REWRAP' then do
  701.             button COMMAND '"YTReFormat.rexx DOREWRAP"' LABEL _label._YTRFW
  702.          end
  703.          else do
  704.             button COMMAND '"YTReFormat.rexx DOUNQUOTE"' LABEL _label._YTRFO
  705.          end
  706.          button COMMAND '"window ID YTUSR close"' PORT YAMTOOLS,
  707.                 LABEL _text._cancel
  708.         endgroup
  709.  
  710.    endwindow
  711.  
  712.    window ID YTUSR ATTRS MUIA_Window_ActiveObject MUIV_Window_ActiveObject_Next
  713.  
  714. Return
  715.  
  716. /******************************************************************************/
  717. /*  Simple information/error message window.                                  */
  718. /******************************************************************************/
  719. InfoWindow:
  720.  
  721.    window ID YTINF TITLE _title._info ATTRS MUIA_Window_PublicScreen screen,
  722.           MUIA_Window_SizeGadget FALSE,
  723.           MUIA_Window_DepthGadget FALSE
  724.  
  725.       group 
  726.          group 
  727.             text ID STEXT HELP help.STEXT  NODE node.STEXT LABEL infotext
  728.          endgroup
  729.          if showbusy then do
  730.             group
  731.                object CLASS '"Busy.mcc"' ATTRS MUIA_VertWeight 25
  732.             endgroup
  733.          end
  734.          if infobuttons ~='' then do
  735.             group HORIZ
  736.                group 
  737.                   space HORIZ 
  738.                endgroup
  739.                group 
  740.                   radio ID SQUIT HELP help.SQUIT  NODE node.SQUIT LABELS infobuttons
  741.                endgroup
  742.                group 
  743.                   space HORIZ 
  744.                endgroup
  745.             endgroup
  746.          end
  747.          else do
  748.             group 
  749.                space HORIZ 100
  750.             endgroup
  751.          end
  752.       endgroup
  753.    endwindow
  754.  
  755. Return
  756.  
  757. /******************************************************************************/
  758. /*                      MUIREXX TAGS & VARIABLES                              */
  759. /******************************************************************************/
  760. Muivars:
  761.  
  762. MUIA_CycleChain =           0x80421ce7
  763. MUIA_Disabled =             0x80423661
  764. MUIA_HorizWeight =          0x80426db9
  765. MUIA_List_Format =          0x80423c0a 
  766. MUIA_List_Entries =         0x80421654 
  767. MUIA_Listview_MultiSelect = 0x80427e08
  768. MUIA_List_Quiet =           0x8042d8c7
  769. MUIA_List_Visible =         0x8042191f
  770. MUIA_Selected =             0x8042654b
  771. MUIA_ShowMe =               0x80429ba8
  772. MUIA_String_Accept =        0x8042e3e1
  773. MUIA_VertWeight =           0x804298d0 
  774. MUIA_Weight =               0x80421d1f 
  775. MUIA_Window_ActiveObject =  0x80427925
  776. MUIA_Window_DepthGadget  =  0x80421923
  777. MUIA_Window_PublicScreen =  0x804278e4
  778. MUIA_Window_SizeGadget  =   0x8042e33d
  779. MUIA_String_AdvanceOnCR =   0x804226de
  780. MUIA_Window_ActiveObject =  0x80427925
  781.  
  782. MUIM_List_Jump =            0x8042baab
  783. MUIM_List_Clear =           0x8042ad89
  784.  
  785. TRUE=1
  786. FALSE=0
  787.  
  788. MUIV_List_Insert_Active = -1
  789. MUIV_List_Insert_Bottom = -3
  790. MUIV_Listview_MultiSelect_Shifted = 2
  791. MUIV_List_Remove_First =  0
  792. MUIV_Window_ActiveObject_Next = -1
  793.  
  794. Return
  795.  
  796. /**************************************************************************/
  797. /*           Various values used throughout the various routines          */
  798. /**************************************************************************/
  799. YTvars:
  800.  
  801. missing='.'
  802.  
  803. numerics='"=0123456789"'                    /* valid for numeric input    */
  804.  
  805. wrapmin1=30                                 /* arbitrary low value        */
  806. wrapmin2=20                                 /* arbitrary low value        */
  807. wrapmax=79                                  /* max with LF for text/plain */
  808.  
  809. Return
  810.  
  811. /**************************************************************************/
  812. /*    Messages, text, etc. constructed using previously defined values    */
  813. /**************************************************************************/
  814. Builtvars:
  815.  
  816. Return
  817.  
  818. /**************************************************************************/
  819. /*               Pointers into the YamTools.guide documentation           */
  820. /**************************************************************************/
  821. Helpvars:
  822.  
  823. node.QTEXT='7.3.'
  824. node.RUSR1='7.3.'
  825. node.RUSR2='7.3.'
  826. node.RUSR3='7.3.'
  827. node.RWRAP='7.3.'
  828. node.SQUIT='7.3.'
  829. node.STEXT='7.3.'
  830. node.YTRFD='7.3.'
  831. node.YTRFF='7.3.'
  832. node.YTRFM='7.3.'
  833. node.YTRFO='7.3.'
  834. node.YTRFQ='7.3.'
  835. node.YTRFR='7.3.'
  836. node.YTRFS='7.3.'
  837. node.YTRFT='7.3.'
  838. node.YTRFU='7.3.'
  839. node.YTRFW='7.3.'
  840. node.YTRFY='7.3.'
  841.  
  842. Return
  843.  
  844. /**************************************************************************/
  845. /*       Mui Gadgets, text, msgs, etc. used in YamTools                   */
  846. /**************************************************************************/
  847. Localize:
  848.  
  849. /*********************************/
  850. /* Miscellaneous info strings    */
  851. /*********************************/
  852. _title._main='"YTReFormat v1.0"'            /* main screen title          */
  853. _title._info='"YTreFormat Info"'            /* default title on infomsg   */
  854. _title._user='"YTReFormat User Info"'       /* title for user info screen */
  855.  
  856. _text._ok='Ok'                              /* various OK buttons         */
  857. _text._cancel='Cancel'                      /* LABEL for CANCEL button    */
  858. _text._wordwrap='WordWrap'                  /* text for WordWrap field    */
  859.  
  860. _label._YTRFD='Done'                        /* label for DONE button      */
  861. _label._YTRFU='UnDo'                        /* label for DONE button      */
  862. _label._YTRFR='ReDo'                        /* label for DONE button      */
  863. _label._YTRFS='Save'                        /* label for SAVE button      */
  864. _label._YTRFQ='Quit'                        /* label for QUIT  button     */
  865. _label._YTRFY='Style'                       /* label for STYLE button     */              
  866. _label._YTRFO='UnQuote'                     /* label for UNQUOTE button   */
  867. _label._YTRFW='ReWrap'                      /* label for REWRAP  button   */
  868.  
  869. _text._outquote='Outer Quoting:'         /* text for outer quoting prompt */
  870. _text._inquote='Inner Quoting:'          /* text for inner quoting prompt */
  871. _text._wraplen='Wrap Length:'            /* text for word wrap len prompt */
  872.  
  873. _text._doredo='Doing ReDo'                   /* doing redo message        */
  874. _text._doundo='Doing UnDo'                   /* doing undo message        */
  875. _text._dowrap='Doing ReWrapping'             /* doing ReWrapping message  */
  876. _text._dounquote='Doing UnQuoting'           /* doing UnQuoting message   */
  877. _text._savemail='Saving Mail File'           /* saving mailfile message   */
  878. _text._procmail='Processing Mail for ReWrapping' /* processing mail msg   */
  879.  
  880. /*********************************/
  881. /* Various error conditions      */
  882. /*********************************/
  883.  
  884. _text._noyam='You need YAM running to use YAMTOOLS'    /* yam not running */
  885. _text._noyt='You need YAMTOOLS running to use YTReFormat' /* no yamtools  */
  886. _text._secondrun='You ALREADY have a YTReFormat started'  /* second run   */
  887. _text._nomail='You need to select a mail file to use YTReFormat'
  888.  
  889.                                          /* not a valid file or not found */               
  890. _text._badmail='Not a valid file selected for Rewrapping'
  891.  
  892. _text._noredofile='Unable to open REDO file'     /* bad redo file message */
  893. _text._noundofile='Unable to open UNDO file'     /* bad undo file message */
  894. _text._nolines='No lines selected for rewrapping' /* no lines selected    */
  895.  
  896.                   /* the word wrap is too short for the quoting requested */
  897. _text._wwshort='Word Wrap length is too small for quoting requested'
  898.  
  899.                   /* word wrap length is out of valid range values        */
  900. _text._wwoutrange='Word Wrap should be between 'wrapmin1 'and ' wrapmax
  901.  
  902.                   /* non-numeric value -- shouldn't actually happen       */
  903. _text._wwnotnum='Word Wrap length must be a numeric value'
  904.  
  905.                   /* bad parm passed to program..should never happen      */
  906. _text._badparm='Unrecognized parms passed to YTReFormat:'
  907.  
  908. /**************************************************************************/
  909. /*           Help Messages to display with MUI bubble facility.           */
  910. /*                                                                        */
  911. /* Format is simple: help.ID where ID is the id specified on the MUI      */
  912. /* object statement.                                                      */
  913. /* Similar approach for accessing the .guide information using the NODE   */
  914. /* option on the object statement.                                        */
  915. /*                                                                        */
  916. /**************************************************************************/
  917.  
  918. help.QTEXT='""'
  919. help.RUSR1='"Outer-most Quoting Character(s)"'
  920. help.RUSR2='"Inner Quoting Character(s)"'
  921. help.RUSR3='"Word Wrap length to use"'
  922. help.RWRAP='"Word Wrap value from Yam:.config"'
  923. help.SQUIT=''
  924. help.STEXT=''
  925. help.YTRFD='"Save changes to YAM mail file and Quit"'
  926. help.YTRFF='"Yam mail file"'
  927. help.YTRFM='"Select lines to rewrap"'
  928. help.YTRFO='"UnQuote the selected lines"'
  929. help.YTRFQ='"Abandon changes since last save"'
  930. help.YTRFR='"Undo previous Undo wordwrap action"'
  931. help.YTRFS='"Save changes to YAM mail file"'
  932. help.YTRFT='"Short Header of mail file"'
  933. help.YTRFU='"Undo previous wordwrap action"'
  934. help.YTRFW='"ReWrap the selected lines"'
  935. help.YTRFY='"Style the selected lines"'
  936.  
  937. Return
  938.  
  939.